Liveness Probes和Readiness Probes是用來監控Pod內容器健康的機制,透過這些Probes,Kubernetes 可以自動化處理異常容器,確保服務的可用性。
用來判斷容器是否還「活著」,也就是說是否還在正常運行。如果Liveness Probe連續多次失敗,Kubernetes 會將此Pod標記為失敗,再依據此Pod的RestartPolicy決定是否重啟容器,用來判定應用是否進入無法恢復的狀態,如果Liveness Probe檢測到應用無法恢復會自動重啟容器。
當應用發生死鎖或無限循環時,無法正常處理請求,Liveness Probe可以自動修復,重新啟動容器來恢復正常。
livenessProbe:
exec:
command:
- cat
- /healthy
initialDelaySeconds: 5
periodSeconds: 5
在此範例中,每5秒執行一次cat /healthy命令來檢查健康狀態。如果容器內的/healthy文件存在能夠被成功讀取,那麼此容器是健康的;如果檢查失敗,則會認為此容器處於不健康的狀態並嘗試重啟它。
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
在此範例中,Liveness Probe每5秒對/healthz端點發送檢查,初始會延遲3秒,來確認容器是否還在正常運行。
用來確定是否準備好處理請求。即使應用仍正常在運行,也可能在有些情況下無法處理流量。如果Readiness Probe檢測到無法處理請求,Kubernetes會從Service中的Endpoint中刪除這個Pod,以避免將流量轉發到它。
當應用在某些情況下暫時無法對外提供服務。Readiness Probe可確保應用在這些情況下不會接收到請求。
基本上與Liveness Probe相同,也可以使用 HTTP、TCP、或命令的方式進行檢查。
readinessProbe:
exec:
command:
- cat
- /healthy
initialDelaySeconds: 5
periodSeconds: 5
在這個範例中,Kubernetes會每5秒執行一次cat /healthy 命令來檢查容器的狀態。如果容器內的/healthy文件存在能夠被成功讀取,則認為這個容器準備好接收流量;如果檢查失敗,則把這個Pod從Service中的 endpoint移除,不再將流量轉發給這個容器,直到檢查再次通過。
readinessProbe:
httpGet:
path: /readiness
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
在這個範例中,Readiness Probe每10秒對/readiness端點發送檢查,初始會延遲5秒,確保容器完全準備好再接受流量。
Liveness Probe和Readiness Probe的結合可以讓Kubernetes能夠自動化管理容器狀態,提升容錯能力和可用性。Liveness讓健康不佳的容器被重啟,而Readiness讓未準備好的容器不接收流量,這種互相作用能夠提升服務的穩定性和保證服務持續運行。